草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - 当堆栈为空时, 'pop()' 方法应该返回什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C++STLstackquestion:Whydoespop()notthrowanexceptionifthestackisempty?在C++中设计堆栈时,pop()方法(或front()方法)在堆栈为空时应该返回什么?以下哪个设计更好?抛出异常未定义,但需要用户调用isempty()方法在调用pop()之前进行检查返回一个bool代码,同时使用一个额外的参数(引用)来传递弹出的元素定义一个唯一的空元素好的,我看到我的问题不是很清楚,让我尝试重写它:有一些数据结构可以基于链表实现,如堆栈、队列,它们中的每

c++ - 当堆栈为空时, 'pop()' 方法应该返回什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:C++STLstackquestion:Whydoespop()notthrowanexceptionifthestackisempty?在C++中设计堆栈时,pop()方法(或front()方法)在堆栈为空时应该返回什么?以下哪个设计更好?抛出异常未定义,但需要用户调用isempty()方法在调用pop()之前进行检查返回一个bool代码,同时使用一个额外的参数(引用)来传递弹出的元素定义一个唯一的空元素好的,我看到我的问题不是很清楚,让我尝试重写它:有一些数据结构可以基于链表实现,如堆栈、队列,它们中的每

c++ - 对于具有线性存储的容器,可以使用原始指针而不是具有 STL 算法的迭代器吗?

我有一个自定义vector容器,它在内部存储项目一个线性数组。昨晚,我试图为我的类实现自定义迭代器,以便能够将它们与STL算法一起使用。我取得了一些成功,您可以在这里看到:Liveexamplewithcustomiterators这样做时,我发现我只能将原始指针传递给STL算法,它们似乎工作正常。这是没有任何迭代器的示例:#include#include#include#includetemplateclassmy_array{T*data_;std::size_tsize_;public:my_array():data_(NULL),size_(0){}my_array(std::

c++ - 对于具有线性存储的容器,可以使用原始指针而不是具有 STL 算法的迭代器吗?

我有一个自定义vector容器,它在内部存储项目一个线性数组。昨晚,我试图为我的类实现自定义迭代器,以便能够将它们与STL算法一起使用。我取得了一些成功,您可以在这里看到:Liveexamplewithcustomiterators这样做时,我发现我只能将原始指针传递给STL算法,它们似乎工作正常。这是没有任何迭代器的示例:#include#include#include#includetemplateclassmy_array{T*data_;std::size_tsize_;public:my_array():data_(NULL),size_(0){}my_array(std::

c++ - STL 算法 : Why no additional interface for containers (additional to iterator pairs)?

我想知道为什么STL不会重载它们的算法函数,这样我就可以通过简单地提供一个容器而不是采用更冗长的方式来传递begin+end迭代器来调用它们。我当然理解为什么我们还想使用迭代器对来处理容器/数组的子序列,但是,几乎所有对这些方法的调用都使用了整个容器:std::for_each(myVector.begin(),myVector.end(),doSomething);我会发现只写更方便、可读和可维护std::for_each(myVector,doSomething);STL不提供这些重载是否有原因?[编辑:我的意思不是用这个受限的接口(interface)替换接口(interface

c++ - STL 算法 : Why no additional interface for containers (additional to iterator pairs)?

我想知道为什么STL不会重载它们的算法函数,这样我就可以通过简单地提供一个容器而不是采用更冗长的方式来传递begin+end迭代器来调用它们。我当然理解为什么我们还想使用迭代器对来处理容器/数组的子序列,但是,几乎所有对这些方法的调用都使用了整个容器:std::for_each(myVector.begin(),myVector.end(),doSomething);我会发现只写更方便、可读和可维护std::for_each(myVector,doSomething);STL不提供这些重载是否有原因?[编辑:我的意思不是用这个受限的接口(interface)替换接口(interface

c++ - 在模块(exes和dlls)之间使用STL(TR1)shared_ptr是否安全

我知道在一个模块中新建某些内容并在另一个模块中删除它通常会导致VC++出现问题。不同运行时的问题。如果我没记错的话,将模块与静态链接的运行时和/或动态链接的版本控制不匹配混合起来都会搞砸。但是,跨模块使用VC++2008的std::tr1::shared_ptr是否安全?因为只有一个版本的运行时甚至知道什么是shared_ptr,所以静态链接是我唯一的危险(现在......)。我以为我已经阅读了boost的shared_ptr版本可以像这样安全使用,但我使用的是Redmond的版本......我试图避免在分配模块中对释放对象进行特殊调用。(或类本身中的“删除这个”之类的东西)。如果这一

c++ - 在模块(exes和dlls)之间使用STL(TR1)shared_ptr是否安全

我知道在一个模块中新建某些内容并在另一个模块中删除它通常会导致VC++出现问题。不同运行时的问题。如果我没记错的话,将模块与静态链接的运行时和/或动态链接的版本控制不匹配混合起来都会搞砸。但是,跨模块使用VC++2008的std::tr1::shared_ptr是否安全?因为只有一个版本的运行时甚至知道什么是shared_ptr,所以静态链接是我唯一的危险(现在......)。我以为我已经阅读了boost的shared_ptr版本可以像这样安全使用,但我使用的是Redmond的版本......我试图避免在分配模块中对释放对象进行特殊调用。(或类本身中的“删除这个”之类的东西)。如果这一

c++ - 你如何使用gdb?

我决定了解我们的C/C+*nix实践者如何使用gdb调试器。这是我通常使用的:b-breakfilename.c:line#,function,filename.cpp:function,className::Membern,c,s--下一步继续gdb程序名=>设置断点==>运行[参数列表](我这样做是为了在程序启动前设置断点)l-列出周围的源代码。附加进程ID6休息[地点]gdbprogramNamecorefile.core(检查应用崩溃的原因)我有时也会在退出函数(breakexit)处设置断点来检查程序堆栈infob检查所有断点清除[断点列表]你如何使用它?

c++ - 你如何使用gdb?

我决定了解我们的C/C+*nix实践者如何使用gdb调试器。这是我通常使用的:b-breakfilename.c:line#,function,filename.cpp:function,className::Membern,c,s--下一步继续gdb程序名=>设置断点==>运行[参数列表](我这样做是为了在程序启动前设置断点)l-列出周围的源代码。附加进程ID6休息[地点]gdbprogramNamecorefile.core(检查应用崩溃的原因)我有时也会在退出函数(breakexit)处设置断点来检查程序堆栈infob检查所有断点清除[断点列表]你如何使用它?